/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jautomata;

import java.awt.Color;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import jxl.Sheet;
import jxl.Workbook;

/**
 *
 * @author JorgeLuis
 */
public class Controller_Automata {

    String tabla_transiciones[][];
    List<String> simbolos = new ArrayList<String>();
    List<String> nodos = new ArrayList<String>();

    public Controller_Automata() {
        genera_simbolos();
    }

    public void genera_simbolos() {
        File file = new File("../Recursos/Tabla de Transiciones.xls");

        try {
            Workbook archivo_excel = Workbook.getWorkbook(file);
            Sheet hoja = archivo_excel.getSheet(0);
            int num_filas = hoja.getRows();

            for (int i = 0; i <= num_filas; i++) {
                simbolos.add(hoja.getCell(i, 0).getContents());
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e, "ATENCIÓN", JOptionPane.PLAIN_MESSAGE);
        }
    }

    public void genera_nodos() {
        File file = new File("../Recursos/Tabla de Transiciones.xls");
        try {
            Workbook archivo_excel = Workbook.getWorkbook(file);
            Sheet hoja = archivo_excel.getSheet(0);
            int num_filas = hoja.getRows();
            for (int i = 0; i < num_filas; i++) {
                nodos.add(hoja.getCell(0, i).getContents());
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e, "ATENCIÓN", JOptionPane.PLAIN_MESSAGE);
        }
    }

    public int posicion_fila(String nodo) {
        int posicion = 0;
        for (int i = 0; i < nodos.size(); i++) {
            if (nodo.equals(nodos.get(i))) {
                posicion = i;
                break;
            }
        }
        return posicion;

    }

    public int posicion_columna(char caracter) {
        int posicion = 0;

        for (int i = 0; i < simbolos.size(); i++) {
            if (caracter == simbolos.get(i).charAt(0)) {
                posicion = i;
                break;
            }
        }
        return posicion;

    }

    public void genera_tabla_transiciones() {
        File file = new File("../Recursos/Tabla de Transiciones.xls");

        try {
            Workbook archivo_excel = Workbook.getWorkbook(file);
            Sheet hoja = archivo_excel.getSheet(0);
            int num_columnas = hoja.getColumns();
            int num_filas = hoja.getRows();
            tabla_transiciones = new String[num_filas][num_columnas];
            for (int i = 1; i < num_filas; i++) {
                for (int j = 1; j < num_columnas; j++) {
                    tabla_transiciones[i][j] = hoja.getCell(j, i).getContents();

                }
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e, "ATENCIÓN", JOptionPane.PLAIN_MESSAGE);
        }
    }

    public void comprobar_palabra_reservada(JTextField txt_palabra_reservada, JTextArea txa_resultado) {
        //Recorrer cadena
        char caracter = ' ';
        String nodo_final = "";
        try {
            for (int i = 0; i < txt_palabra_reservada.getText().length(); i++) {
                caracter = txt_palabra_reservada.getText().charAt(i);
                if (nodo_final.equals("")) {
                    nodo_final = tabla_transiciones[i + 1][posicion_columna(caracter)];
                } else {
                    nodo_final = tabla_transiciones[posicion_fila(nodo_final)][posicion_columna(caracter)];
                }

            }
//Si el nodo final es -1 es palabra reservada..
            if (nodo_final.equals("-1")) {
                txa_resultado.setText("PALABRA RESERVADA");
                txt_palabra_reservada.setBackground(new Color(94, 244, 18));
            } else {
                if (!nodo_final.equals("0")) {
                    txt_palabra_reservada.setBackground(new Color(93, 155, 197));
                    txa_resultado.setText("ESPERANDO..");
                } else {
                    txa_resultado.setText("ERROR, POR FAVOR INGRESE OTRA PALABRA");
                    txt_palabra_reservada.setBackground(new Color(219, 198, 220));
                }
            }
        } catch (Exception e) {
            txa_resultado.setText("ERROR, POR FAVOR INGRESE OTRA PALABRA");
            txt_palabra_reservada.setBackground(new Color(219, 198, 220));
        }
    }

    public void nuevo(JTextField txt_palabra_reservada) {
        txt_palabra_reservada.setText("");
    }

    public List<String> getNodos() {
        return nodos;
    }

    public void setNodos(List<String> nodos) {
        this.nodos = nodos;
    }

    public List<String> getSimbolos() {
        return simbolos;
    }

    public void setSimbolos(List<String> simbolos) {
        this.simbolos = simbolos;
    }

    public String[][] getTabla_transiciones() {
        return tabla_transiciones;
    }

    public void setTabla_transiciones(String[][] tabla_transiciones) {
        this.tabla_transiciones = tabla_transiciones;
    }
}
